/****扩展数学库·静态库#
*****extcmath.h is used as an extension to the standard library math.h~!
*****扩展数学库作者::@风云雾客~
*****Library Author::@FengYunWuKe~
*****扩展数学库创建时间::2024年~
*****Library Creation Time::Y2024~
*****扩展数学库版本::v0.0.1~?
*****extcmath.h_version::v0.0.0~?
*****__EXTCMATH_H__::C_STD=C23~
*****__EXTCMATH_H__::GCC_VERSION=15.0.0~
*****libextcmath.a support gnu something~!
*****Copyright(LIB) by FengYunWuKe,Inc.All rights reserved.*****/
#ifndef __EXTCMATH_H__
#define __EXTCMATH_H__
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <stddef.h>
#include <stdlib.h>
#include <uchar.h>
#include <ctype.h>
#include <string.h>
#include <strings.h>
#include <wchar.h>
#include <wctype.h>
#include <stdbool.h>
#include <stdarg.h>
#include <limits.h>
#include <unistd.h>
#include <signal.h>
#include <dirent.h>
#include <assert.h>
#include <errno.h>
#include <malloc.h>
#include <memory.h>
#include <setjmp.h>
#include <locale.h>
#include <stdalign.h>
#include <iso646.h>
#include <stdint.h>
#include <inttypes.h>
#include <float.h>
#include <fenv.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <regex.h>
#include <utime.h>
#include <features.h>
#include <termios.h>
#include <semaphore.h>
#include <search.h>
#include <fnmatch.h>
#include <glob.h>
#include <cpio.h>
#include <tar.h>
#include <sched.h>
#include <spawn.h>
#include <grp.h>
#include <pwd.h>
#include <ucontext.h>
#include <pthread.h>
#include <libgen.h>
#include <ftw.h>
#include <langinfo.h>
#include <nl_types.h>
#include <poll.h>
#include <iconv.h>
#include <netdb.h>
#include <syslog.h>
#include <stdio_ext.h>
#include <complex.h>
#include <stdatomic.h>
#include <ucontext.h>
#include <termio.h>
#include <paths.h>
#include <resolv.h>
#include <mntent.h>
#include <utmp.h>
#include <sched.h>
#include <elf.h>
#include <endian.h>
#include <lastlog.h>
#include <link.h>
#include <syscall.h>
#include <sysexits.h>
#include <pty.h>
#include <xlocale.h>
#include <ifaddrs.h>
#include <jni.h>
#include <ar.h>
#include <fts.h>
#include <alloca.h>
#include <getopt.h>
#include <err.h>
#include <error.h>
#include <byteswap.h>
//#include <cpu-features.h>
#include <zlib.h>
#include <zconf.h>
#include <stdint-gcc.h>
#include <stdfix.h>
#include <stdckdint.h>
#include <stdnoreturn.h>
#include <openacc.h>
#include <acc_prof.h>
#include <arm_acle.h>
#include <arm_bf16.h>
#include <arm_fp16.h>
#include <arm_neon.h>
#include <arm_neon_sve_bridge.h>
#include <arm_sme.h>
#include <arm_sve.h>
#include <omp.h>
#include <unwind.h>
//#include <varargs.h>
#include <crypt.h>
#include <libintl.h>
#include <gcov.h>
#include <syslimits.h>
#include <execinfo.h>
#include <ISO_Fortran_binding.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <net/if_packet.h>
#include <net/ethernet.h>
#include <net/route.h>
#include <arpa/inet.h>
#include <arpa/telnet.h>
#include <arpa/ftp.h>
#include <arpa/tftp.h>
#include <arpa/nameser.h>
#include <arpa/nameser_compat.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <netinet/in.h>
#include <netinet/in6.h>
#include <netinet/if_ether.h>
#include <netinet/ether.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp6.h>
#include <netinet/in_systm.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/limits.h>
#include <sys/unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/times.h>
#include <sys/uio.h>
//#include <sys/timeb.h>
#include <sys/eventfd.h>
#include <sys/ttydefaults.h>
#include <sys/syslog.h>
#include <sys/klog.h>
#include <sys/timerfd.h>
#include <sys/timex.h>
#include <sys/ptrace.h>
#include <sys/procfs.h>
#include <sys/queue.h>
#include <sys/quota.h>
#include <sys/prctl.h>
#include <sys/user.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/param.h>
#include <sys/utsname.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <sys/resource.h>
#include <sys/mtio.h>
#include <sys/mount.h>
#include <sys/vt.h>
#include <sys/vfs.h>
#include <sys/endian.h>
#include <sys/errno.h>
#include <sys/swap.h>
#include <sys/statfs.h>
#include <sys/sysinfo.h>
#include <sys/sysconf.h>
#include <sys/fcntl.h>
#include <sys/syscall.h>
#include <sys/inotify.h>
#include <sys/fsuid.h>
#include <sys/reg.h>
#include <sys/reboot.h>
#include <sys/auxv.h>
#include <sys/xattr.h>
#include <sys/ucontext.h>
#include <sys/personality.h>
#include <sys/cachectl.h>
#include <sys/capability.h>
#include <sys/sysmacros.h>
#include <sys/system_properties.h>
#include <sys/poll.h>
#include <sys/epoll.h>
#include <sys/random.h>
#include <sys/cdefs.h>
#include <sys/signal.h>
#include <sys/sendfile.h>
#include <sys/signalfd.h>
#include <sys/file.h>
#define _DATE_
#define _TIME_
#define _LINE_
#define _FILE_
#define _STDC_
#define _STDC_VERSION_
#define _STDC_UTF_16_
#define _STDC_UTF_32_
#define _STDC_EOBTED_
#define _STDC_IEC_559_
#define _STDC_IEC_559_COMPLEX_
#define _STDC_ISO_10646_
#define _STDC_IEC_60559_BFP_
#define _STDC_IEC_60559_DFP_
#define _STDC_IEC_60559_COMPLEX_
#define _STDC_IEC_60559_TYPES_
#define _STDC_HOSTED_
#define _FUNCTION_
#define _GNU_SOURCE
#ifdef _GNU_SOURCE
#define SUPPORTS_GNU_SOURCE
#endif
#define EXTCMATH_E 2.718281828459045235360287 //自然常数
#define EXTCMATH_PI 3.141592653589793238462643 //圆周率
#define EXTCMATH_OLA 0.577215664901532860606512 //欧拉常数
#define EXTCMATH_LFPI 2.622057554292119810464839 //双纽线周率
/****开始****/
#define TRUTH 1
#define WORSE 0
#define SUCCESS_SIGN +1
#define FAILURE_SIGN -1
/****结束****/
/****实用宏函数开始****/
#define new_type(T) typeof(T)
#define del_type(T) typeof_unqual(T)
#define new_ptype(T) typeof(T*)
#define del_ptype(T) typeof_unqual(T*)
#define c_calloc(T,N) (typeof(T)*)calloc(N,(sizeof(T)))
#define c_realloc(T,P,N) (typeof(T)*)realloc(((void *)(P)),N*(sizeof(T)))
#define c_malloc(T,N) (typeof(T)*)malloc(N*(sizeof(T)))
#define c_free(P) (free((void *)(P)))
#define c_type_check_object(type,object) ({type obj_1;typeof(object) obj_2;(void)(&obj_1==&obj_2);1;})
#define c_type_check_function(type,function) ({typeof(type) func=function;(void)func;})
#define c_offset_of(type,member) ((size_t)&((type *)0)->member)
#define c_container_of(ptr,type,member) ({const typeof(((type *)0)->member) *mptr=(ptr);(type *)((char *)mptr-c_offset_of(type,member));})
/****实用宏函数结束****/
/****数学处理宏函数开始****/
//
#define extcmath_max(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);(void)(&num_1==&num_2);num_1>num_2?num_1:num_2;})
#define extcmath_min(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);(void)(&num_1==&num_2);num_1<num_2?num_1:num_2;})
#define extcmath_add(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);auto result=num_1+num_2;result;})
#define extcmath_sub(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);auto result=num_1-num_2;result;})
#define extcmath_mul(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);auto result=num_1*num_2;result;})
#define extcmath_div(head_num,tail_num) ({typeof(head_num) num_1=(head_num);typeof(tail_num) num_2=(tail_num);auto result=num_1/num_2;result;})
/****数学处理宏函数结束****/
/****数学计算宏函数开始****/
#define range_natural_num_sum_s(head,tail) _Generic((head,tail),unsigned int:range_natural_num_sum,unsigned long int:range_natural_num_suml,unsigned long long int:range_natural_num_sumll)(head,tail)
#define range_integer_sum_s(head,tail) _Generic((head,tail),int:range_integer_sum,long int:range_integer_suml,long long int:range_integer_sumll)(head,tail)
#define range_odd_sum_s(head,tail) _Generic((head,tail),int:range_odd_sum,long int:range_odd_suml,long long int:range_odd_sumll)(head,tail)
#define range_even_sum_s(head,tail) _Generic((head,tail),int:range_even_sum,long int:range_even_suml,long long int:range_even_sumll)(head,tail)
/****数学计算宏函数结束****/
/****实数域扩展三角函数宏函数开始****/
#define sin_s(num) _Generic((num),float:sinf,double:sin,long double:sinl)(num)
#define cos_s(num) _Generic((num),float:cosf,double:cos,long double:cosl)(num)
#define tan_s(num) _Generic((num),float:tanf,double:tan,long double:tanl)(num)
#define cot_s(num) _Generic((num),float:cotf,double:cot,long double:cotl)(num)
#define sec_s(num) _Generic((num),float:secf,double:sec,long double:secl)(num)
#define csc_s(num) _Generic((num),float:cscf,double:csc,long double:cscl)(num)
#define asin_s(num) _Generic((num),float:asinf,double:asin,long double:asinl)(num)
#define acos_s(num) _Generic((num),float:acosf,double:acos,long double:acosl)(num)
#define atan_s(num) _Generic((num),float:atanf,double:atan,long double:atanl)(num)
#define acot_s(num) _Generic((num),float:acotf,double:acot,long double:acotl)(num)
#define asec_s(num) _Generic((num),float:asecf,double:asec,long double:asecl)(num)
#define acsc_s(num) _Generic((num),float:acscf,double:acsc,long double:acscl)(num)
#define versin_s(num) _Generic((num),float:versinf,double:versin,long double:versinl)(num)
#define vercos_s(num) _Generic((num),float:vercosf,double:vercos,long double:vercosl)(num)
#define haversin_s(num) _Generic((num),float:haversinf,double:haversin,long double:haversinl)(num)
#define havercos_s(num) _Generic((num),float:havercosf,double:havercos,long double:havercosl)(num)
#define exsec_s(num) _Generic((num),float:exsecf,double:exsec,long double:exsecl)(num)
#define excsc_s(num) _Generic((num),float:excscf,double:excsc,long double:excscl)(num)
#define aversin_s(num) _Generic((num),float:aversinf,double:aversin,long double:aversinl)(num)
#define avercos_s(num) _Generic((num),float:avercosf,double:avercos,long double:avercosl)(num)
#define ahaversin_s(num) _Generic((num),float:ahaversinf,double:ahaversin,long double:ahaversinl)(num)
#define ahavercos_s(num) _Generic((num),float:ahavercosf,double:ahavercos,long double:ahavercosl)(num)
#define aexsec_s(num) _Generic((num),float:aexsecf,double:aexsec,long double:aexsecl)(num)
#define aexcsc_s(num) _Generic((num),float:aexcscf,double:aexcsc,long double:aexcscl)(num)
#define sinh_s(num) _Generic((num),float:sinhf,double:sinh,long double:sinhl)(num)
#define cosh_s(num) _Generic((num),float:coshf,double:cosh,long double:coshl)(num)
#define tanh_s(num) _Generic((num),float:tanhf,double:tanh,long double:tanhl)(num)
#define coth_s(num) _Generic((num),float:cothf,double:coth,long double:cothl)(num)
#define sech_s(num) _Generic((num),float:sechf,double:sech,long double:sechl)(num)
#define csch_s(num) _Generic((num),float:cschf,double:csch,long double:cschl)(num)
#define asinh_s(num) _Generic((num),float:asinhf,double:asinh,long double:asinhl)(num)
#define acosh_s(num) _Generic((num),float:acoshf,double:acosh,long double:acoshl)(num)
#define atanh_s(num) _Generic((num),float:atanhf,double:atanh,long double:atanhl)(num)
#define acoth_s(num) _Generic((num),float:acothf,double:acoth,long double:acothl)(num)
#define asech_s(num) _Generic((num),float:asechf,double:asech,long double:asechl)(num)
#define acsch_s(num) _Generic((num),float:acschf,double:acsch,long double:acschl)(num)
/****实数域扩展三角函数宏函数结束****/
/****复数域扩展三角函数宏函数开始****/
#define csin_s(num) _Generic((num),float complex:csinf,double complex:csin,long double complex:csinl)(num)
#define ccos_s(num) _Generic((num),float complex:ccosf,double complex:ccos,long double complex:ccosl)(num)
#define ctan_s(num) _Generic((num),float complex:ctanf,double complex:ctan,long double complex:ctanl)(num)
#define ccot_s(num) _Generic((num),float complex:ccotf,double complex:ccot,long double complex:ccotl)(num)
#define csec_s(num) _Generic((num),float complex:csecf,double complex:csec,long double complex:csecl)(num)
#define ccsc_s(num) _Generic((num),float complex:ccscf,double complex:ccsc,long double complex:ccscl)(num)
#define casin_s(num) _Generic((num),float complex:casinf,double complex:casin,long double complex:casinl)(num)
#define cacos_s(num) _Generic((num),float complex:cacosf,double complex:cacos,long double complex:cacosl)(num)
#define catan_s(num) _Generic((num),float complex:catanf,double complex:catan,long double complex:catanl)(num)
#define cacot_s(num) _Generic((num),float complex:cacotf,double complex:cacot,long double complex:cacotl)(num)
#define casec_s(num) _Generic((num),float complex:casecf,double complex:casec,long double complex:casecl)(num)
#define cacsc_s(num) _Generic((num),float complex:cacscf,double complex:cacsc,long double complex:cacscl)(num)
#define cversin_s(num) _Generic((num),float complex:cversinf,double complex:cversin,long double complex:cversinl)(num)
#define cvercos_s(num) _Generic((num),float complex:cvercosf,double complex:cvercos,long double complex:cvercosl)(num)
#define chaversin_s(num) _Generic((num),float complex:chaversinf,double complex:chaversin,long double complex:chaversinl)(num)
#define chavercos_s(num) _Generic((num),float complex:chavercosf,double complex:chavercos,long double complex:chavercosl)(num)
#define cexsec_s(num) _Generic((num),float complex:cexsecf,double complex:cexsec,long double complex:cexsecl)(num)
#define cexcsc_s(num) _Generic((num),float complex:cexcscf,double complex:cexcsc,long double complex:cexcscl)(num)
#define caversin_s(num) _Generic((num),float complex:caversinf,double complex:caversin,long double complex:caversinl)(num)
#define cavercos_s(num) _Generic((num),float complex:cavercosf,double complex:cavercos,long double complex:cavercosl)(num)
#define cahaversin_s(num) _Generic((num),float complex:cahaversinf,double complex:cahaversin,long double complex:cahaversinl)(num)
#define cahavercos_s(num) _Generic((num),float complex:cahavercosf,double complex:cahavercos,long double complex:cahavercosl)(num)
#define caexsec_s(num) _Generic((num),float complex:caexsecf,double complex:caexsec,long double complex:caexsecl)(num)
#define caexcsc_s(num) _Generic((num),float complex:caexcscf,double complex:caexcsc,long double complex:caexcscl)(num)
#define csinh_s(num) _Generic((num),float complex:csinhf,double complex:csinh,long double complex:csinhl)(num)
#define ccosh_s(num) _Generic((num),float complex:ccoshf,double complex:ccosh,long double complex:ccoshl)(num)
#define ctanh_s(num) _Generic((num),float complex:ctanhf,double complex:ctanh,long double complex:ctanhl)(num)
#define ccoth_s(num) _Generic((num),float complex:ccothf,double complex:ccoth,long double complex:ccothl)(num)
#define csech_s(num) _Generic((num),float complex:csechf,double complex:csech,long double complex:csechl)(num)
#define ccsch_s(num) _Generic((num),float complex:ccschf,double complex:ccsch,long double complex:ccschl)(num)
#define casinh_s(num) _Generic((num),float complex:casinhf,double complex:casinh,long double complex:casinhl)(num)
#define cacosh_s(num) _Generic((num),float complex:cacoshf,double complex:cacosh,long double complex:cacoshl)(num)
#define catanh_s(num) _Generic((num),float complex:catanhf,double complex:catanh,long double complex:catanhl)(num)
#define cacoth_s(num) _Generic((num),float complex:cacothf,double complex:cacoth,long double complex:cacothl)(num)
#define casech_s(num) _Generic((num),float complex:casechf,double complex:casech,long double complex:casechl)(num)
#define cacsch_s(num) _Generic((num),float complex:cacschf,double complex:cacsch,long double complex:cacschl)(num)
/****复数域扩展三角函数宏函数结束****/
typedef unsigned short int short_size_t;
typedef unsigned int int_size_t;
typedef unsigned long int long_size_t;
typedef unsigned long long int huge_size_t;
typedef signed short int short_ssize_t;
typedef signed int int_ssize_t;
typedef signed long int long_ssize_t;
typedef signed long long int huge_ssize_t;
typedef float complex cp_float;
typedef double complex cp_double;
typedef long double complex cp_doubles;
typedef float Space2D_float;
typedef double Space2D_double;
typedef long double Space2D_doubles;
typedef float Space3D_float;
typedef double Space3D_double;
typedef long double Space3D_doubles;
//
/****二维空间结构声明开始****/
typedef struct
{
    float x,y;
}Space2Df_t;
typedef struct
{
    double x,y;
}Space2D_t;
typedef struct
{
    long double x,y;
}Space2Dl_t;
typedef struct
{
	Space2Df_t head,tail;
}Space2Df_line_t;
typedef struct
{
	Space2D_t head,tail;
}Space2D_line_t;
typedef struct
{
	Space2Dl_t head,tail;
}Space2Dl_line_t;
typedef struct
{
	Space2Df_line_t head,tail;
}Space2Df_angle_t;
typedef struct
{
	Space2D_line_t head,tail;
}Space2D_angle_t;
typedef struct
{
	Space2Dl_line_t head,tail;
}Space2Dl_angle_t;
/****二维空间结构声明结束****/
/****三维空间结构声明开始****/
typedef struct
{
    float x,y,z;
}Space3Df_t;
typedef struct
{
    double x,y,z;
}Space3D_t;
typedef struct
{
    long double x,y,z;
}Space3Dl_t;
typedef struct
{
	Space3Df_t head,tail;
}Space3Df_line_t;
typedef struct
{
	Space3D_t head,tail;
}Space3D_line_t;
typedef struct
{
	Space3Dl_t head,tail;
}Space3Dl_line_t;
typedef struct
{
	Space3Df_line_t head,tail;
}Space3Df_angle_t;
typedef struct
{
	Space3D_line_t head,tail;
}Space3D_angle_t;
typedef struct
{
	Space3Dl_line_t head,tail;
}Space3Dl_angle_t;
/****三维空间结构声明结束****/
/****特殊属性函数声明开始****/
extern void when_call_func(void (*head_func)(),void (*tail_func)());
extern void when_calls_func(size_t call_times,void (*head_func)(),void (*tail_func)());
extern void when_year_func(int target_year,void (*func)());
extern void when_range_year_func(int head_year,int tail_year,void (*func)());
extern void when_month_func(int target_month,void (*func)());
extern void when_range_month_func(int head_month,int tail_month,void (*func)());
extern void when_day_func(int target_day,void (*func)());
extern void when_range_day_func(int head_day,int tail_day,void (*func)());
extern void when_week_func(int target_week,void (*func)());
extern void when_range_week_func(int head_week,int tail_week,void (*func)());
extern void when_hour_func(int target_hour,void (*func)());
extern void when_range_hour_func(int head_hour,int tail_hour,void (*func)());
extern void when_minute_func(int target_minute,void (*func)());
extern void when_range_minute_func(int head_minute,int tail_minute,void (*func)());
extern void when_second_func(int target_second,void (*func)());
extern void when_range_second_func(int head_second,int tail_second,void (*func)());
extern int print(const char *restrict format,...);
extern int scan(const char *restrict format,...);
extern int wprint(const wchar_t *restrict format,...);
extern int wscan(const wchar_t *restrict format,...);
extern int get_stdc_age();
extern void get_stdc_version();
extern void extcmath_get_stdc_age();
extern void extcmath_get_stdc_version();
//
extern void extcmath_init() __attribute__((constructor)); //构造函数属性
extern void extcmath_exit() __attribute__((destructor)); //析构函数属性
/****特殊属性函数声明结束****/
/****数学计算函数声明开始****/
extern bool is_odd_num(int num);
extern bool is_odd_numl(long int num);
extern bool is_odd_numll(long long int num);
extern bool is_even_num(int num);
extern bool is_even_numl(long int num);
extern bool is_even_numll(long long int num);
extern bool is_prime_num(int_size_t num);
extern bool is_prime_numl(long_size_t num);
extern bool is_prime_numll(huge_size_t num);
extern bool is_composite_num(int_size_t num);
extern bool is_composite_numl(long_size_t num);
extern bool is_composite_numll(huge_size_t num);
extern int_size_t range_natural_num_sum(int_size_t head,int_size_t tail);
extern long_size_t range_natural_num_suml(long_size_t head,long_size_t tail);
extern huge_size_t range_natural_num_sumll(huge_size_t head,huge_size_t tail);
extern int range_integer_sum(int head,int tail);
extern long int range_integer_suml(long int head,long int tail);
extern long long int range_integer_sumll(long long int head,long long int tail);
extern int range_odd_sum(int head,int tail);
extern long int range_odd_suml(long int head,long int tail);
extern long long int range_odd_sumll(long long int head,long long int tail);
extern int range_even_sum(int head,int tail);
extern long int range_even_suml(long int head,long int tail);
extern long long int range_even_sumll(long long int head,long long int tail);
extern int_size_t range_prime_sum(int_size_t head,int_size_t tail);
extern long_size_t range_prime_suml(long_size_t head,long_size_t tail);
extern huge_size_t range_prime_sumll(huge_size_t head,huge_size_t tail);
extern int_size_t range_composite_sum(int_size_t head,int_size_t tail);
extern long_size_t range_composite_suml(long_size_t head,long_size_t tail);
extern huge_size_t range_composite_sumll(huge_size_t head,huge_size_t tail);
/****数学计算函数声明结束****/
/****实数域扩展三角函数声明开始****/
extern float cotf(float num); //余切三角函数·实数域(float)
extern double cot(double num); //余切三角函数·实数域(double)
extern long double cotl(long double num); //余切三角函数·实数域(long double)
extern float secf(float num); //正割三角函数·实数域(float)
extern double sec(double num); //正割三角函数·实数域(double)
extern long double secl(long double num); //正割三角函数·实数域(long double)
extern float cscf(float num); //余割三角函数·实数域(float)
extern double csc(double num); //余割三角函数·实数域(double)
extern long double cscl(long double num); //余割三角函数·实数域(long double)
extern float acotf(float num); //反余切三角函数·实数域(float)
extern double acot(double num); //反余切三角函数·实数域(double)
extern long double acotl(long double num); //反余切三角函数·实数域(long double)
extern float asecf(float num); //反正割三角函数·实数域(float)
extern double asec(double num); //反正割三角函数·实数域(double)
extern long double asecl(long double num); //反正割三角函数·实数域(long double)
extern float acscf(float num); //反余割三角函数·实数域(float)
extern double acsc(double num); //反余割三角函数·实数域(double)
extern long double acscl(long double num); //反余割三角函数·实数域(long double)
extern float versinf(float num); //正矢三角函数·实数域(float)
extern double versin(double num); //正矢三角函数·实数域(double)
extern long double versinl(long double num); //正矢三角函数·实数域(long double)
extern float vercosf(float num); //余矢三角函数·实数域(float)
extern double vercos(double num); //余矢三角函数·实数域(double)
extern long double vercosl(long double num); //余矢三角函数·实数域(long double)
extern float haversinf(float num); //半正矢三角函数·实数域(float)
extern double haversin(double num); //半正矢三角函数·实数域(double)
extern long double haversinl(long double num); //半正矢三角函数·实数域(long double)
extern float havercosf(float num); //半余矢三角函数·实数域(float)
extern double havercos(double num); //半余矢三角函数·实数域(double)
extern long double havercosl(long double num); //半余矢三角函数·实数域(long double)
extern float exsecf(float num); //外正割三角函数·实数域(float)
extern double exsec(double num); //外正割三角函数·实数域(double)
extern long double exsecl(long double num); //外正割三角函数·实数域(long double)
extern float excscf(float num); //外余割三角函数·实数域(float)
extern double excsc(double num); //外余割三角函数·实数域(double)
extern long double excscl(long double num); //外余割三角函数·实数域(long double)
extern float aversinf(float num); //反正矢三角函数·实数域(float)
extern double aversin(double num); //反正矢三角函数·实数域(double)
extern long double aversinl(long double num); //反正矢三角函数·实数域(long double)
extern float avercosf(float num); //反余矢三角函数·实数域(float)
extern double avercos(double num); //反余矢三角函数·实数域(double)
extern long double avercosl(long double num); //反余矢三角函数·实数域(long double)
extern float ahaversinf(float num); //反半正矢三角函数·实数域(float)
extern double ahaversin(double num); //反半正矢三角函数·实数域(double)
extern long double ahaversinl(long double num); //反半正矢三角函数·实数域(long double)
extern float ahavercosf(float num); //反半余矢三角函数·实数域(float)
extern double ahavercos(double num); //反半余矢三角函数·实数域(double)
extern long double ahavercosl(long double num); //反半余矢三角函数·实数域(long double)
extern float aexsecf(float num); //反外正割三角函数·实数域(float)
extern double aexsec(double num); //反外正割三角函数·实数域(double)
extern long double aexsecl(long double num); //反外正割三角函数·实数域(long double)
extern float aexcscf(float num); //反外余割三角函数·实数域(float)
extern double aexcsc(double num); //反外余割三角函数·实数域(double)
extern long double aexcscl(long double num); //反外余割三角函数·实数域(long double)
extern float cothf(float num); //双曲余切三角函数·实数域(float)
extern double coth(double num); //双曲余切三角函数·实数域(double)
extern long double cothl(long double num); //双曲余切三角函数·实数域(long double)
extern float sechf(float num); //双曲正割三角函数·实数域(float)
extern double sech(double num); //双曲正割三角函数·实数域(double)
extern long double sechl(long double num); //双曲正割三角函数·实数域(long double)
extern float cschf(float num); //双曲余割三角函数·实数域(float)
extern double csch(double num); //双曲余割三角函数·实数域(double)
extern long double cschl(long double num); //双曲余割三角函数·实数域(long double)
extern float acothf(float num); //反双曲余切三角函数·实数域(float)
extern double acoth(double num); //反双曲余切三角函数·实数域(double)
extern long double acothl(long double num); //反双曲余切三角函数·实数域(long double)
extern float asechf(float num); //反双曲正割三角函数·实数域(float)
extern double asech(double num); //反双曲正割三角函数·实数域(double)
extern long double asechl(long double num); //反双曲正割三角函数·实数域(long double)
extern float acschf(float num); //反双曲余割三角函数·实数域(float)
extern double acsch(double num); //反双曲余割三角函数·实数域(double)
extern long double acschl(long double num); //反双曲余割三角函数·实数域(long double)
/****实数域扩展三角函数声明结束****/
/****复数域扩展三角函数声明开始****/
extern cp_float ccotf(cp_float num); //余切三角函数·复数域(float)
extern cp_double ccot(cp_double num); //余切三角函数·复数域(double)
extern cp_doubles ccotl(cp_doubles num); //余切三角函数·复数域(long double)
extern cp_float csecf(cp_float num); //正割三角函数·复数域(float)
extern cp_double csec(cp_double num); //正割三角函数·复数域(double)
extern cp_doubles csecl(cp_doubles num); //正割三角函数·复数域(long double)
extern cp_float ccscf(cp_float num); //余割三角函数·复数域(float)
extern cp_double ccsc(cp_double num); //余割三角函数·复数域(double)
extern cp_doubles ccscl(cp_doubles num); //余割三角函数·复数域(long double)
extern cp_float cacotf(cp_float num); //反余切三角函数·复数域(float)
extern cp_double cacot(cp_double num); //反余切三角函数·复数域(double)
extern cp_doubles cacotl(cp_doubles num); //反余切三角函数·复数域(long double)
extern cp_float casecf(cp_float num); //反正割三角函数·复数域(float)
extern cp_double casec(cp_double num); //反正割三角函数·复数域(double)
extern cp_doubles casecl(cp_doubles num); //反正割三角函数·复数域(long double)
extern cp_float cacscf(cp_float num); //反余割三角函数·复数域(float)
extern cp_double cacsc(cp_double num); //反余割三角函数·复数域(double)
extern cp_doubles cacscl(cp_doubles num); //反余割三角函数·复数域(long double)
extern cp_float cversinf(cp_float num); //正矢三角函数·复数域(float)
extern cp_double cversin(cp_double num); //正矢三角函数·复数域(double)
extern cp_doubles cversinl(cp_doubles num); //正矢三角函数·复数域(long double)
extern cp_float cvercosf(cp_float num); //余矢三角函数·复数域(float)
extern cp_double cvercos(cp_double num); //余矢三角函数·复数域(double)
extern cp_doubles cvercosl(cp_doubles num); //余矢三角函数·复数域(long double)
extern cp_float chaversinf(cp_float num); //半正矢三角函数·复数域(float)
extern cp_double chaversin(cp_double num); //半正矢三角函数·复数域(double)
extern cp_doubles chaversinl(cp_doubles num); //半正矢三角函数·复数域(long double)
extern cp_float chavercosf(cp_float num); //半余矢三角函数·复数域(float)
extern cp_double chavercos(cp_double num); //半余矢三角函数·复数域(double)
extern cp_doubles chavercosl(cp_doubles num); //半余矢三角函数·复数域(long double)
extern cp_float cexsecf(cp_float num); //外正割三角函数·复数域(float)
extern cp_double cexsec(cp_double num); //外正割三角函数·复数域(double)
extern cp_doubles cexsecl(cp_doubles num); //外正割三角函数·复数域(long double)
extern cp_float cexcscf(cp_float num); //外余割三角函数·复数域(float)
extern cp_double cexcsc(cp_double num); //外余割三角函数·复数域(double)
extern cp_doubles cexcscl(cp_doubles num); //外余割三角函数·复数域(long double)
extern cp_float caversinf(cp_float num); //反正矢三角函数·复数域(float)
extern cp_double caversin(cp_double num); //反正矢三角函数·复数域(double)
extern cp_doubles caversinl(cp_doubles num); //反正矢三角函数·复数域(long double)
extern cp_float cavercosf(cp_float num); //反余矢三角函数·复数域(float)
extern cp_double cavercos(cp_double num); //反余矢三角函数·复数域(double)
extern cp_doubles cavercosl(cp_doubles num); //反余矢三角函数·复数域(long double)
extern cp_float cahaversinf(cp_float num); //反半正矢三角函数·复数域(float)
extern cp_double cahaversin(cp_double num); //反半正矢三角函数·复数域(double)
extern cp_doubles cahaversinl(cp_doubles num); //反半正矢三角函数·复数域(long double)
extern cp_float cahavercosf(cp_float num); //反半余矢三角函数·复数域(float)
extern cp_double cahavercos(cp_double num); //反半余矢三角函数·复数域(double)
extern cp_doubles cahavercosl(cp_doubles num); //反半余矢三角函数·复数域(long double)
extern cp_float caexsecf(cp_float num); //反外正割三角函数·复数域(float)
extern cp_double caexsec(cp_double num); //反外正割三角函数·复数域(double)
extern cp_doubles caexsecl(cp_doubles num); //反外正割三角函数·复数域(long double)
extern cp_float caexcscf(cp_float num); //反外余割三角函数·复数域(float)
extern cp_double caexcsc(cp_double num); //反外余割三角函数·复数域(double)
extern cp_doubles caexcscl(cp_doubles num); //反外余割三角函数·复数域(long double)
extern cp_float ccothf(cp_float num); //双曲余切三角函数·复数域(float)
extern cp_double ccoth(cp_double num); //双曲余切三角函数·复数域(double)
extern cp_doubles ccothl(cp_doubles num); //双曲余切三角函数·复数域(long double)
extern cp_float csechf(cp_float num); //双曲正割三角函数·复数域(float)
extern cp_double csech(cp_double num); //双曲正割三角函数·复数域(double)
extern cp_doubles csechl(cp_doubles num); //双曲正割三角函数·复数域(long double)
extern cp_float ccschf(cp_float num); //双曲余割三角函数·复数域(float)
extern cp_double ccsch(cp_double num); //双曲余割三角函数·复数域(double)
extern cp_doubles ccschl(cp_doubles num); //双曲余割三角函数·复数域(long double)
extern cp_float cacothf(cp_float num); //反双曲余切三角函数·复数域(float)
extern cp_double cacoth(cp_double num); //反双曲余切三角函数·复数域(double)
extern cp_doubles cacothl(cp_doubles num); //反双曲余切三角函数·复数域(long double)
extern cp_float casechf(cp_float num); //反双曲正割三角函数·复数域(float)
extern cp_double casech(cp_double num); //反双曲正割三角函数·复数域(double)
extern cp_doubles casechl(cp_doubles num); //反双曲正割三角函数·复数域(long double)
extern cp_float cacschf(cp_float num); //反双曲余割三角函数·复数域(float)
extern cp_double cacsch(cp_double num); //反双曲余割三角函数·复数域(double)
extern cp_doubles cacschl(cp_doubles num); //反双曲余割三角函数·复数域(long double)
/****复数域扩展三角函数声明结束****/
//
/****二维空间函数声明开始****/
//
extern Space2Df_t *Space2Df_new_point(Space2D_float x,Space2D_float y);
extern Space2D_t *Space2D_new_point(Space2D_double x,Space2D_double y);
extern Space2Dl_t *Space2Dl_new_point(Space2D_doubles x,Space2D_doubles y);
extern void Space2Df_del_point(Space2Df_t *point);
extern void Space2D_del_point(Space2D_t *point);
extern void Space2Dl_del_point(Space2Dl_t *point);
////
extern bool Space2Df_point2_are_same(Space2Df_t point_1,Space2Df_t point_2);
extern bool Space2D_point2_are_same(Space2D_t point_1,Space2D_t point_2);
extern bool Space2Dl_point2_are_same(Space2Dl_t point_1,Space2Dl_t point_2);
extern bool Space2Df_points_are_same(Space2Df_t *point_s,int count);
extern bool Space2D_points_are_same(Space2D_t *point_s,int count);
extern bool Space2Dl_points_are_same(Space2Dl_t *point_s,int count);
////
extern Space2D_float Space2Df_point2_euclidean_distance(Space2Df_t point_1,Space2Df_t point_2);
extern Space2D_double Space2D_point2_euclidean_distance(Space2D_t point_1,Space2D_t point_2);
extern Space2D_doubles Space2Dl_point2_euclidean_distance(Space2Dl_t point_1,Space2Dl_t point_2);
extern Space2D_float Space2Df_points_euclidean_distance(Space2Df_t *point_s,int count);
extern Space2D_double Space2D_points_euclidean_distance(Space2D_t *point_s,int count);
extern Space2D_doubles Space2Dl_points_euclidean_distance(Space2Dl_t *point_s,int count);
////
extern Space2Df_line_t *Space2Df_new_line(Space2Df_t head_point,Space2Df_t tail_point);
extern Space2D_line_t *Space2D_new_line(Space2D_t head_point,Space2D_t tail_point);
extern Space2Dl_line_t *Space2Dl_new_line(Space2Dl_t head_point,Space2Dl_t tail_point);
extern void Space2Df_del_line(Space2Df_line_t *line);
extern void Space2D_del_line(Space2D_line_t *line);
extern void Space2Dl_del_line(Space2Dl_line_t *line);
extern Space2D_float Space2Df_line_length(Space2Df_line_t line);
extern Space2D_double Space2D_line_length(Space2D_line_t line);
extern Space2D_doubles Space2Dl_line_length(Space2Dl_line_t line);
/****二维空间函数声明结束****/
/****三维空间函数声明开始****/
//
extern Space3Df_t *Space3Df_new_point(Space3D_float x,Space3D_float y,Space3D_float z);
extern Space3D_t *Space3D_new_point(Space3D_double x,Space3D_double y,Space3D_double z);
extern Space3Dl_t *Space3Dl_new_point(Space3D_doubles x,Space3D_doubles y,Space3D_doubles z);
extern void Space3Df_del_point(Space3Df_t *point);
extern void Space3D_del_point(Space3D_t *point);
extern void Space3Dl_del_point(Space3Dl_t *point);
////
extern bool Space3Df_point2_are_same(Space3Df_t point_1,Space3Df_t point_2);
extern bool Space3D_point2_are_same(Space3D_t point_1,Space3D_t point_2);
extern bool Space3Dl_point2_are_same(Space3Dl_t point_1,Space3Dl_t point_2);
extern bool Space3Df_points_are_same(Space3Df_t *point_s,int count);
extern bool Space3D_points_are_same(Space3D_t *point_s,int count);
extern bool Space3Dl_points_are_same(Space3Dl_t *point_s,int count);
////
extern Space3D_float Space3Df_point2_euclidean_distance(Space3Df_t point_1,Space3Df_t point_2);
extern Space3D_double Space3D_point2_euclidean_distance(Space3D_t point_1,Space3D_t point_2);
extern Space3D_doubles Space3Dl_point2_euclidean_distance(Space3Dl_t point_1,Space3Dl_t point_2);
extern Space3D_float Space3Df_points_euclidean_distance(Space3Df_t *point_s,int count);
extern Space3D_double Space3D_points_euclidean_distance(Space3D_t *point_s,int count);
extern Space3D_doubles Space3Dl_points_euclidean_distance(Space3Dl_t *point_s,int count);
////
extern Space3Df_line_t *Space3Df_new_line(Space3Df_t head_point,Space3Df_t tail_point);
extern Space3D_line_t *Space3D_new_line(Space3D_t head_point,Space3D_t tail_point);
extern Space3Dl_line_t *Space3Dl_new_line(Space3Dl_t head_point,Space3Dl_t tail_point);
extern void Space3Df_del_line(Space3Df_line_t *line);
extern void Space3D_del_line(Space3D_line_t *line);
extern void Space3Dl_del_line(Space3Dl_line_t *line);
extern Space3D_float Space3Df_line_length(Space3Df_line_t line);
extern Space3D_double Space3D_line_length(Space3D_line_t line);
extern Space3D_doubles Space3Dl_line_length(Space3Dl_line_t line);
/****三维空间函数声明结束****/
#endif /*__EXTCMATH_H__*/